/**
 * 格式化金额函数
 * @param {number|string} amount - 需要格式化的金额（支持数字或字符串）
 * @param {number} [decimalPlaces=2] - 保留小数位数（默认2位）
 * @returns {string} 格式化后的金额字符串
 */
export default function formatMoney(amount, decimalPlaces = 2) {
    if(!amount){
        return '00.00'
    }
    // 转换为数字类型
    const num = Number(amount);

    // 验证输入有效性
    if (isNaN(num)) {
        throw new Error('输入必须是有效数字');
    }

    // 四舍五入保留指定位数（解决浮点精度问题）
    const fixedNum = Math.round(num * Math.pow(10, decimalPlaces)) / Math.pow(10, decimalPlaces);

    // 拆分为整数和小数部分
    const [integerPart, decimalPart = ''] = fixedNum.toString().split('.');

    // 添加千位分隔符（正则表达式方案）
    const formattedInteger = integerPart.replace(/\B(?=(\d{3})+(?!\d))/g, ",");

    // 处理小数部分（补足位数）
    const formattedDecimal = decimalPart.padEnd(decimalPlaces, '0').slice(0, decimalPlaces);

    return formattedInteger + (decimalPlaces > 0 ? '.' + formattedDecimal : '');
}

// 测试用例
// console.log(formatMoney(1234567.891));  // "1,234,567.89"
// console.log(formatMoney(1234.5));       // "1,234.50"
// console.log(formatMoney(0.1 + 0.2));    // "0.30"（解决浮点精度问题）
// console.log(formatMoney(123456789));    // "123,456,789.00"
// console.log(formatMoney(-1234.567, 1)); // "-1,234.6"
